package la.iok.hzsvn.lewin.movie.service;

import la.iok.hzsvn.lewin.movie.core.Token;
import la.iok.hzsvn.lewin.movie.entity.AppPackageItem;
import la.iok.hzsvn.lewin.movie.model.AppPackageItemParam;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.NotNullElement;
import la.iok.hzsvn.share.annotations.Nullable;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public interface AppPackageItemService extends BaseService<AppPackageItem,Long> {
    Long save(@NotNull Token token, @NotNull AppPackageItemParam param);
    void delete(@NotNull Token token, @Nullable Long id);
    void deletePackageItems(@Nullable Long appPackageId);
    void updateFile(Token token, Long id,Long fileId);
    /**
     * 上传文件
     * @param token 操作用户
     * @param id 应用程序文件项的id
     * @param file 文件
     */
    void uploadFile(@NotNull Token token, @NotNull Long id, MultipartFile file);

    boolean exist(@NotNull Long id);

    @NotNull
    @NotNullElement
    List<AppPackageItem> packageFiles(@Nullable Long appPackageId);

    /**
     * 判断是否所有文件都上传了并且存在文件系统中.程序包必须包含至少一个文件，如果为空也会抛出异常
     * @param appPackageId 程序包id
     */
    void allFileExist(@NotNull Long appPackageId);


    void downloadFile(@NotNull HttpServletResponse response, @Nullable Long id);

    void download2Local(String appPath, AppPackageItem item) throws IOException;

    @Nullable
    String digest(@Nullable Long id);

    String storePath(Long id);
}
